// 音频工具函数模块

/**
 * 播放音效
 * @param {string} soundType - 音效类型，'right'、'wrong' 或 'click'
 * @returns {InnerAudioContext} - 返回音频上下文对象，便于外部控制
 */
const playSound = function(soundType) {
  // 创建音频上下文
  const audioContext = wx.createInnerAudioContext();
  
  // 根据音效类型设置音频源
  if (soundType === 'right') {
    audioContext.src = '/mp3/right.mp3';
  } else if (soundType === 'wrong') {
    audioContext.src = '/mp3/wrong.mp3';
  } else if (soundType === 'click') {
    audioContext.src = '/mp3/click.mp3';
  }
  
  // 播放音频
  audioContext.play();
  
  // 监听音频播放结束事件，释放资源
  audioContext.onEnded(() => {
    audioContext.destroy();
  });
  
  // 监听音频播放错误事件，释放资源并打印错误信息
  audioContext.onError((err) => {
    console.error('播放音效失败:', err);
    audioContext.destroy();
  });
  
  return audioContext;
};

/**
 * 播放正确答案音效
 * @returns {InnerAudioContext} - 返回音频上下文对象
 */
const playRightSound = function() {
  return playSound('right');
};

/**
 * 播放错误答案音效
 * @returns {InnerAudioContext} - 返回音频上下文对象
 */
const playWrongSound = function() {
  return playSound('wrong');
};

/**
 * 播放点击音效
 * @returns {InnerAudioContext} - 返回音频上下文对象
 */
const playClickSound = function() {
  return playSound('click');
};

/**
 * 播放单词音频
 * @param {string} word - 要播放的单词
 * @returns {InnerAudioContext} - 返回音频上下文对象
 */
const playWordSound = function(word) {
  // 创建音频上下文
  const audioContext = wx.createInnerAudioContext();
  
  // 设置音频源，这里假设单词音频文件存放在特定路径下
  // 实际应用中可能需要根据具体的音频资源路径进行调整
  audioContext.src = `/mp3/words/${word}.mp3`;
  
  // 播放音频
  audioContext.play();
  
  // 监听音频播放结束事件，释放资源
  audioContext.onEnded(() => {
    audioContext.destroy();
  });
  
  // 监听音频播放错误事件，释放资源并打印错误信息
  audioContext.onError((err) => {
    console.error(`播放单词"${word}"音频失败:`, err);
    audioContext.destroy();
  });
  
  return audioContext;
};

// 导出函数
exports.playSound = playSound;
exports.playRightSound = playRightSound;
exports.playWrongSound = playWrongSound;
exports.playClickSound = playClickSound;
exports.playWordSound = playWordSound;